var BOSH_SERVICE = '/http-bind';
var IMAGES_PATH = 'img/chat/';
var connection = null;
var puedoSalir = false;

$(window).unload(function() {
	if(connecion != null){
		connection.disconnect();
		connection.flush();
	}


});

(function($){
	
	var listaConversaciones = new Array();
	var propiedadConversacion = new Array();
	var listaNombres = new Object();
	var localName = "";

	$.fn.chat = function(options) {
		
		var settings = $.extend({}, $.fn.chat.defaults, options);
		var tabla = $("<table>");
		var fila = $("<tr>");
		var col1 = $("<td>");
		var col2 = $("<td>");
		
var estado = $("<div>");
col2.append(estado)
var listaConectados = $("<div>");
col1.append(listaConectados)
fila.append(col1,col2);
tabla.append(fila);
$(this).append(tabla);
		
		estado.wixmenu({primary:"",secondary:"",title:"<img title='Desconectado' src='"+IMAGES_PATH+"/offline.png'>", elements: [
		                     {name:"Disponible", callback:function(){
		                    	 estado.wixmenu({newTitle:"<img title='Conectado' src='"+IMAGES_PATH+"/online.png'>"})
		                    	 $(document).xmpp({cmd:"changeStatus", status:""});
		                     }},
		                     {name:"No disponible", callback:function(){
		                    	 $(document).xmpp({cmd:"changeStatus", status:"dnd"});
		                    	 estado.wixmenu({newTitle:"<img title='Conectado' src='"+IMAGES_PATH+"/dnd.png'>"})
		                     }},
		                     {name:"Ausente", callback:function(){
		                    	 estado.wixmenu({newTitle:"<img title='Conectado' src='"+IMAGES_PATH+"/away.png'>"})
		                    	 $(document).xmpp({cmd:"changeStatus", status:"away"});
		                    	 
		                     }},
		                     {name:"Desconectado", callback:function(){
		                    	 $(document).xmpp({cmd:"disconnect"});
		                     }},
		                     {name:"Cambiar nombre", callback:function(){
		                    	 jPrompt("Escribe tu nuevo nombre",localName,"Cambiar nombre",function(nombre){
		                    		 if($.trim(nombre).length > 0)
		                    		 {
		                    			 localName = nombre;
		                    		 	$(document).xmpp({cmd:"changeName",name:nombre});
		                    		 }
		                    	 });
		                     }}
		                 ]
		           });
		
		//Para que encaje bien el icono
		estado.next().find(".ui-button-text").removeClass("ui-button-text");
		
		listaConectados.wixmenu({title:"Desconectado", elements: [
		                     {name:"Conectar",id:"inicio",callback:function(){
		                    	    $(document).xmpp({cmd:"changeStatus", status:""});
		                    	    listaConectados.wixmenu({newTitle:"Conectando"});
		                     	}
		                     }
		                 ]
		           });
		
		$(document).xmpp({jid:$.cookie("jid"), password:"",
			onDisconnect:function(){
			estado.wixmenu({newTitle:"<img title='Desconectado' src='"+IMAGES_PATH+"/offline.png'>"});
			listaConectados.wixmenu({newTitle:"Desconectado"});
			listaConectados.wixmenu({clean:true});
			listaConectados.wixmenu({insertar:[{name:"Conectar", id:"inicio",callback:function(){
        	    	$(document).xmpp({cmd:"changeStatus", status:""});
        	    	listaConectados.wixmenu({newTitle:"Conectando "+$.cookie("jid")});
         		}
			}]});
		},
			onConnect: function(){
				estado.wixmenu({newTitle:"<img title='Conectado' src='"+IMAGES_PATH+"/online.png'>"})
				listaConectados.wixmenu({newTitle:"Conectado"});
				listaConectados.wixmenu({remove:"inicio"});
				listaConectados.wixmenu({insertar:[{name:"Nadie conectado", id:"vacio"}]});
			},
			onIq: function(iq){
				$.each($(iq).find("body").find("iq"),function(i,iqReal)
				{
					if($(iqReal).find("vCard").length == 1)
					{
						if($(iqReal).attr("from") != null)
						{
							var usuario =$(iqReal).attr("from");
							usuario = usuario.split("@");
							usuario = usuario[0];
							if($(iqReal).find("vCard").find("FN").text().length > 0)
								listaConectados.wixmenu({insertar:[{name:$(iqReal).find("vCard").find("FN").text(),id:usuario}]});
						}
						else
						{
							localName = $(iqReal).find("vCard").find("FN").text();
						}
					}
				});
			},
			onPresence: function(presence){
				$.each($(presence).find("body").find("presence"),function(i,presenceReal)
				{
					if($(presenceReal).find("show").length == 1)
					{
						var from = $(presenceReal).attr("from");
						var usuario = from.split("@");
						usuario = usuario[0];
							
							listaConectados.wixmenu({insertar:[{name:usuario, icon:IMAGES_PATH+"/"+$(presenceReal).find("show").text()+".png", id:usuario, 
								callback: function(){
								var listaMinimizadas = $("#taskBar a");
								var minimizado = false;
								var pos = 0;
								
								while (minimizado == false && pos < listaMinimizadas.length)
								{
							      if($(listaMinimizadas[pos]).text() == "Conversacion con "+usuario)
							      {
									minimizado = true;
								  }
								  else
									pos++;
							    }
								//Solo creamos si no existe la ventana
								if(!existeConversacion(usuario))
								{//No existe, creamos
									crearConversacion(usuario);
								}else if (minimizado == true)
								{
									//Existe pero esta minimizada, hacemos que parpadee
									$(listaMinimizadas[pos]).addClass("ui-state-hover");
									
								}
								
							}
							}]});
					}else{
						var from = $(presenceReal).attr("from");
						var usuario = from.split("@");
						usuario = usuario[0];
						if($(presenceReal).attr("type")=="unavailable")
						{//Desconectado
							listaConectados.wixmenu({remove:usuario});
							if(listaConectados.next().find("li").length == 0)
								listaConectados.wixmenu({insertar:[{name:"Nadie conectado", id:"vacio"}]});
						}else{
							listaConectados.wixmenu({remove:"vacio"});
							listaConectados.wixmenu({insertar:[{name:usuario, icon:IMAGES_PATH+"/online.png", id:usuario,
								callback: function(){
								var listaMinimizadas = $("#taskBar a");
								var minimizado = false;
								var pos = 0;
								
								while (minimizado == false && pos < listaMinimizadas.length)
								{
							      if($(listaMinimizadas[pos]).text() == "Conversacion con "+usuario)
							      {
									minimizado = true;
								  }
								  else
									pos++;
							    }
								//Solo creamos si no existe la ventana
								if(!existeConversacion(usuario))
								{//No existe, creamos
									crearConversacion(usuario);
								}else if (minimizado == true)
								{
									//Existe pero esta minimizada, hacemos que parpadee
									$(listaMinimizadas[pos]).addClass("ui-state-hover");
									
								}
								
							}}]});
							setTimeout(function(){
								$(document).xmpp({cmd:"vcard", to:$(presenceReal).attr("from")});
							},1000);
						}
					}
				});
			},
			onMessage: function(message){
				message = $(message).find("message");
				var from = message.attr("from");
				
				from = from.split("/");
			    from = from[0];
			    
			    var type = message.attr('type');
			    var body = message.find("body");
			    
			    if (type == "chat" && body.length == 1) {
			    	
					//Miramos a ver si esta minimizada
					var listaMinimizadas = $("#taskBar a");
					var minimizado = false;
					var pos = 0;
					var usuario = from.split("@");
					
					while (minimizado == false && pos < listaMinimizadas.length)
					{
				      if($(listaMinimizadas[pos]).text() == "Conversacion con "+usuario[0])
				      {
						minimizado = true;
					  }
					  else
						pos++;
				    }
					//Solo creamos si no existe la ventana
					if(!existeConversacion(usuario[0]))
					{//No existe, creamos
						crearConversacion(usuario[0]);
					}else if (minimizado == true)
					{
						//Existe pero esta minimizada, hacemos que parpadee
						$(listaMinimizadas[pos]).addClass("ui-state-hover");
						
					}
					
					var conversacion = dameConversacion(usuario[0]);
					var mensaje = conversacion.getContainer().find(".mensaje");
					mensaje.append("<div>"+usuario[0]+": "+body.text()+"</div>");
					mensaje.attr({ scrollTop: mensaje[0].scrollHeight });
					
					
					
			    }
			}
		 });

		
		function existeConversacion(jid)
		{
			if(propiedadConversacion.indexOf(jid) == -1)
				return false;
			else
				return true;
		}
		
		function dameIdConversacion(jid)
		{
			return propiedadConversacion.indexOf(jid);
		}
		
		function dameConversacion(jid)
		{
			return listaConversaciones[propiedadConversacion.indexOf(jid)];
		}
		
		function crearConversacion(from)
		{
			//un jid pude ser usuario@wixet.com/Asdf444 pero solo nos interesa usuario
			from = from.split("/");
			from = from[0];
			var nombre;
			
			usuario = from.split("@");
			if(listaNombres[usuario[0]]!=null)
				nombre = listaNombres[usuario];
			else
				nombre = usuario[0];
			
			
			var dialogo ="<div class='mensaje ui-dialog-content ui-widget-content'></div>";
				//dialogo += '<textarea id="chatCon-'+usuario[0]+'" class="tinymce" width="100%"></textarea>';
			dialogo += '<div id="chatCon-'+usuario[0]+'"></div>';
				
			var ventanaChat = $.window({
				   title: "Conversacion con "+nombre,
				   content: dialogo, // load window_block8 html content
				   footerContent: 'Conversacion con '+nombre,
				   containerClass: "portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all",
				   headerClass: "portlet-header-centro ui-widget-header ui-corner-all",
				   frameClass: "portlet-content",
				   footerClass: "portlet-content",
				   z: 998,
				   onResize: function(){
						var contenedor = ventanaChat.getContainer();
						var mensaje = contenedor.find(".mensaje");
						var texto = contenedor.find(".texto");
						mensaje.width(contenedor.width()-10);
						mensaje.height(contenedor.height()-texto.height()-contenedor.find(".window_footer").height()-contenedor.find(".window_title_text").height()-40);
						//mensaje.heigth
						texto.width(contenedor.width()-8);
						$("#texto-listaEmoticonos").hide();
						
					},
				   onDragStart: function(){
						$("#texto-listaEmoticonos").hide();
					},
				   onClose: function(){
						//Es importante cerrar bien la ventana para que luego con mensajes nuevos se muestre
						cerrarConversacion(usuario[0]);
						$("#texto-listaEmoticonos").hide();
						return true;
					}
				});
			
			listaConversaciones.push(ventanaChat);
			propiedadConversacion.push(nombre);
			
			$('#chatCon-'+usuario[0]).editor({onEnter: function(textoLocal){			
				ventanaChat.getContainer().find(".mensaje").append("<div>Yo: "+parsearBBCODE(textoLocal.html())+"</div>");
				ventanaChat.getContainer().find(".mensaje").attr({ scrollTop: ventanaChat.getContainer().find(".mensaje")[0].scrollHeight });

				enviarMensaje(usuario[0]+"@wixet.com",textoLocal.html());
				
				
			}});
				
			var contenedor = ventanaChat.getContainer();
			var mensaje = contenedor.find(".mensaje");
			var texto = contenedor.find(".texto");
			mensaje.width(contenedor.width()-10).height(contenedor.height()-texto.height()-contenedor.find(".window_footer").height()-contenedor.find(".window_title_text").height()-40).css("overflow","auto");
			
			
			
			//ventanaChat.getContainer().find(".mensaje").width(ventanaChat.getContainer().width()-10);
			//ventanaChat.getContainer().find(".mensaje").height(100).css("overflow","auto");
			//ventanaChat.getContainer().find(".tinymce").width(ventanaChat.getContainer().width()-8);
			
		}
		
		function enviarMensaje(to,mensaje)
		{
			$(document).xmpp({cmd:"message", to: to, message:mensaje});
		}
		
		function cerrarConversacion(conversacion)
		{
			var id = dameIdConversacion(conversacion);
				listaConversaciones.splice(id,1);
				propiedadConversacion.splice(id,1);
		}
		
	};
    
	$.fn.chat.defaults  = {
			duration: 50,
			margin: 10,
			dest: $(document),
			zIndex: 2,
			height: "100px",
			width: "100px"
	};
	
	
	
	
})(jQuery);
